/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Br.Com.Cds.Academia.Grupo;

import Br.Com.Cds.Academia.DAO.AcessoMySQL;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Anatólio Pinheiro
 */
public class GrupoControl {
    
    PreparedStatement pstm;     //Objeto que irá realizar consulta mandando uma QUERY para o MySQL.
    ResultSet rs;               //Objeto que trás o retorno da consulta.
    
 String consultaGrupo = "SELECT * FROM GRUPO WHERE GRUPO LIKE ?"; // String utilizada para mandar uma instrução de consulta ao MySQL
 String cadastraGrupo = "INSERT INTO GRUPO (GRUPO, STATUS) VALUES (?,?)"; // String utilizada para mandar uma instrução inserindo dados na tabela
 String alteraGrupo = "UPDATE GRUPO SET GRUPO = ?, STATUS = ? WHERE IDGRUPO = ?";// String utilizada para mandar uma instrução alterando dados na tabela
 String excluiGrupo = "DELETE FROM GRUPO WHERE IDGRUPO = ?"; // String utilizada para excluir registro na tabela.
 
    public void cadastrarGrupos(GrupoBean grupo){  // Metódo que irá cadastrar os dados no banco, ele utiliza um GrupoBean como parametro.

        try{                                           // Bloco Try/Catch porque serão manipulados dados fora do sistema.
             AcessoMySQL mysql = new AcessoMySQL();    // Instancia a Classe de Acesso ao Banco.
             pstm =  (PreparedStatement) mysql.conectar().prepareStatement(cadastraGrupo); //Faz uma consultao ao MySQL, abrindo uma conexão com o banco através do metódo CONECTAR utilizando a String CONSULTAGRUPO
             pstm.setString(1,grupo.getGrupo()); //O PSTM é utilizado para indicar que será passado um parametro para a instrução. Você deve prestar atenção em qual é o  tipo do dado e qual o número do parametro, que é determiando pela "?", e o nome do campo que é determinado no GRUPOBEAN.
             pstm.setString(2,grupo.getStatus());// Passa o segundo parametro.
             pstm.executeUpdate();                 // Aqui se executa a instrução. OBS: No caso de inserir ou alterar algo no Banco é utilizado o EXECUTEUPDATE, no caso de uma consulta será utilizado o EXECUTEQUERY.
             mysql.desconectar();                  // Encerra a Conexão com o Banco, caso não o faça, não será possível abrir outra conexão posteriormente.

        }catch(SQLException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"SQL EXCEPTION ! ERRO AO TENTAR CADASTRAR UM GRUPO!","CDS ACADEMIA",JOptionPane.ERROR_MESSAGE); //Dentro do bloco CATCH podemos colocar uma mensagem de erro, caso o METÒDO não funcione corretamente, isso torna a manutenção mais fácil pos saberemos qual o erro que o sistema apresentar.
        }

    }
    
    public void alterarGrupos(GrupoBean grupo){

        try{                                        // Bloco Try/Catch porque serão manipulados dados fora do sistema.
             AcessoMySQL mysql = new AcessoMySQL(); // Instancia a Classe de Acesso ao Banco.
             pstm =  (PreparedStatement) mysql.conectar().prepareStatement(alteraGrupo); // Passa uma instrução para o MySQL,abrindo uma conexão com o Banco e  utilizando a STRING ALTERAGRUPO.
             pstm.setString(1,grupo.getGrupo()); // Passa o primeiro parametro do TIPO STRING
             pstm.setString(2,grupo.getStatus()); // Passaa o segundo parametro do TIPO STRING 
             pstm.setInt(3,grupo.getIdGrupo());   // Passa o terceiro parametro do TIPO INTEIRO ( IDGRUPO QUE VAI SER O CRITÉRIO UTILIZADO PARA ALTERAR ALGO).
             pstm.executeUpdate();                // Executa a instrução.  
             mysql.desconectar();                 // Fecha a conexão com o Banco.

        }catch(SQLException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"SQL EXCEPTION ! ERRO AO TENTAR ALTERAR UM GRUPO!","CDS ACADEMIA",JOptionPane.ERROR_MESSAGE); //Dentro do bloco CATCH podemos colocar uma mensagem de erro, caso o METÒDO não funcione corretamente, isso torna a manutenção mais fácil pos saberemos qual o erro que o sistema apresentar.
        }

    }
 
    public List<GrupoBean> listarGrupos(String nomeGrupo){   //Metódo do tipo LIST que será utilizado para listar informações de uma tabela, é passado como parametro o critétio para pesquisa.
           List<GrupoBean> grupos = new ArrayList(); // Cria um Array onde será armazenado as informações da consulta.

        try{                                                // Bloco Try/Catch porque serão manipulados dados fora do sistema.
            AcessoMySQL mysql = new AcessoMySQL();          // Instancia a Classe de Acesso ao Banco.
            pstm = (PreparedStatement) mysql.conectar().prepareStatement(consultaGrupo); // Passa uma instrução para o MySQL, abrindo uma conexão e utilizando a String CONSULTAGRUPO.
            pstm.setString(1,nomeGrupo);                         // Passa o parametro utilizado para a consulta.
            rs = pstm.executeQuery();                            // Obtêm o resultado da consulta, executando a QUERY.
            GrupoBean alu;                                      // Cria um objeto do tipo GRUPOBEAN onde será utilizado para atribuir os valores que retornarão da consulta.
            
                while(rs.next()){                               // ENQUANTO existir resultado na consulta os valores serão atribuídos.
                alu = new GrupoBean();                          // Instancia a Classe GrupoBean para poder atribuir os resultados da consulta.
                alu.setIdGrupo(rs.getInt("IDGRUPO"));           // Você deve dizer qual o obejto que receberá o retorno, o RS é utilizado pra atribuir o retorno, o tipo do dado deve ser especificado, e o nome da COLUNA do banco onde será pego o valor deve estar EXATAMENTO IGUAL AO DA TABELA.
                alu.setGrupo(rs.getString("GRUPO"));            // Pega o valor da coluna GRUPO e atribui ao obejto Grupo.
                alu.setStatus(rs.getString("STATUS"));          // Pega o valor da coluna STATUS e atribui ao objeto Status.
                grupos.add(alu);                                // Finaliza o Array.

            }

        }
         catch(SQLException e){
             e.printStackTrace();
             JOptionPane.showMessageDialog(null,"SQL EXCEPTION - ERRO AO TENTAR REALIZAR UMA CONSULTA","CDS ACADEMIA",JOptionPane.ERROR_MESSAGE);
         }
        return grupos;                                          // Utilizado para dizer que o metódo retorna algum valor, observe que o metódo não é do tipo "VOID".
    }
 
        public void excluirGrupo(int idGrupo){      // Metódo para excluir um registro e utiliza o IDGRUPO como critério.

        try{
            AcessoMySQL mysql = new AcessoMySQL();  // Instancia a Classe de Acesso ao Banco.
            pstm = (PreparedStatement) mysql.conectar().prepareStatement(excluiGrupo); //Executa uma instrução, abrindo uma conexão com o Banco e utilizando a String EXCLUIGRUPO.
            pstm.setInt(1,idGrupo); //Passa o parametro IDGRUPO.
            pstm.executeUpdate();   //Executa a instrução.
            mysql.desconectar();    //Fecha a conexão com o Banco.
            
        }catch(SQLException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"SQL EXCEPTION - ERRO AO TENTAR EXCLUIR UM REGISTRO","CDS ACADEMIA",JOptionPane.ERROR_MESSAGE);

        }
    }
    
}
